home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / DiceSource / lib / signal / sigmask.c next >
C/C++ Source or Header  |  1997-09-09  |  1KB  |  77 lines

  1.  
  2. /*
  3.  *  SIGNAL/SIGMASK.C
  4.  *
  5.  *    (c)Copyright 1992-1997 Obvious Implementations Corp.  Redistribution and
  6.  *    use is allowed under the terms of the DICE-LICENSE FILE,
  7.  *    DICE-LICENSE.TXT.
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <signal.h>
  12. #include <dos/dos.h>
  13. #include <lib/unix.h>
  14. #include <clib/exec_protos.h>
  15. #include <clib/dos_protos.h>
  16.  
  17. extern long _SigMask;
  18. extern long _SigRdy;
  19.  
  20. void _SignalReadySigs(void);
  21.  
  22. sigpause(sigMask)
  23. long sigMask;
  24. {
  25.     long oldmask = _SigMask;
  26.  
  27.     _SigMask = sigMask;
  28.  
  29.     for (;;) {
  30.     if (sigcheckchld())
  31.         _SigRdy |= 1 << SIGCHLD;
  32.  
  33.     if ((_SigRdy & ~_SigMask) == 0) {
  34.         long mask = Wait(SIGF_SINGLE | SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D);
  35.         if (mask & (SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D)) {
  36.         amiga_vfork_sigall(mask & (SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D));
  37.         _SigRdy |= 1 << SIGINT;
  38.         }
  39.     }
  40.     if (_SigRdy & ~_SigMask)
  41.         break;
  42.     }
  43.     _SignalReadySigs();
  44.     _SigMask = oldmask;
  45.     return(0);
  46. }
  47.  
  48. sigsetmask(mask)
  49. {
  50.     _SigMask = mask;
  51.     _SignalReadySigs();
  52. }
  53.  
  54. sigblock(mask)
  55. long mask;
  56. {
  57.     long old = _SigMask;
  58.  
  59.     _SigMask |= mask;
  60.     return(old);
  61. }
  62.  
  63. void
  64. _SignalReadySigs()
  65. {
  66.     long rdyMask;
  67.     short i;
  68.  
  69.     if (rdyMask = _SigRdy & ~_SigMask) {
  70.     for (i = 0; i < 32; ++i) {
  71.         if (rdyMask & (1 << i))
  72.         raise(i);
  73.     }
  74.     }
  75. }
  76.  
  77.